package config

import (
	"errors"
	"log"
	"os"

	"gopkg.in/ini.v1"
)

// todo 配置项可以做一个web页面实现可视化操作，
// 这样用户只需要运行程序后访问web页面即可操作，并且随时可以修改配置
var Inst Config
var IsDevMode bool

func InitConfig() error {
	configFilePath := "config.ini"
	if IsDevMode {
		configFilePath = "config.dev.ini"
	}

	// 检查配置文件是否存在
	if _, err := os.Stat(configFilePath); os.IsNotExist(err) {
		// 配置文件不存在，创建并写入默认值
		cfg := defaultConfig()
		// 保存配置文件
		err = cfg.SaveTo(configFilePath)
		if err != nil {
			log.Fatalf("Failed to create config file: %v", err)
			return errors.New("配置文件写入失败，请检查后重新启动")
		}

		return errors.New("配置文件已创建，请填写配置后重新启动")
	}

	// 加载配置文件
	cfg, err := ini.Load(configFilePath)
	if err != nil {
		log.Fatalf("Failed to read file: %v", err)
		return errors.New("配置文件加载失败，请检查后重新启动")
	}

	// 将配置文件映射到结构体
	err = cfg.MapTo(&Inst)
	if err != nil {
		log.Fatalf("Failed to map config: %v", err)
		return errors.New("配置文件解析失败，请检查后重新启动")
	}

	return nil
}
